package com.zhouhailin.aop.aspect;

import org.aspectj.lang.ProceedingJoinPoint;

/**
 * 日志切面【切面中需要执行的各种方法】
 *
 * @Author zhouhailin
 * @date 2023/1/31 16:17
 */
public class LogAspect {

    /**
     * 环绕通知
     *
     * @param pjp
     * @return
     */
    public Object doAround(ProceedingJoinPoint pjp) throws Throwable {
        System.out.println("--------------------------------------------------------------------");
        System.out.println("环绕通知: 进入方法");
        Object o = pjp.proceed();
        System.out.println("环绕通知: 退出方法");
        return o;
    }

    /**
     * 前置通知
     */
    public void doBefore() {
        System.out.println("前置通知");
    }

    /**
     * 后置通知
     *
     * @param result
     */
    public void doAfterReturning(String result) {
        System.out.println("后置通知, 返回值: " + result);
    }

    /**
     * 异常通知
     *
     * @param e
     */
    public void doAfterThrowing(Exception e) {
        System.out.println("异常通知, 异常消息: " + e.getMessage());
    }

    /**
     * 最终通知
     */
    public void doAfter() {
        System.out.println("最终通知");
    }


}
